function output_balance = balance_handler(hObject, eventdata, handles)

    function output = handler(pointer)
        output = ceil(get(pointer, 'Value')) / 50;
    end

    function filter_output = bfilter(options)
        order = 20;
        filter_output = [];
        for index = 1:options.track
            b = firpm(order, options.fc, options.data);
            filter_output = [filter_output, filter(b, 1, options.input(:, index))];
        end
    end

    options.data = [
        0,
        0,
        handler(handles.slider9),
        handler(handles.slider9),
        0,
        0,
        % handler(handles.slider10),
        handler(handles.slider11),
        handler(handles.slider11),
        % handler(handles.slider12),
        0,
        0,
        handler(handles.slider13),
        handler(handles.slider13),
        % handler(handles.slider14),
        0,
        0,
        handler(handles.slider15),
        handler(handles.slider15),
        % handler(handles.slider16),
        0,
        0,
        handler(handles.slider17),
        handler(handles.slider17),
        0,
        0
        % handler(handles.slider18)
        ]'
    % options.fc = [46, 94, 187, 375, 750, 1500, 3000, 6000, 12000];
    options.fc = [0, 0.025, 0.075, 0.125, 0.175, 0.225, 0.275, 0.325, 0.375, 0.425, 0.475, 0.525, 0.575, 0.625, 0.675, 0.725, 0.775, 0.825, 0.875, 0.925, 0.975, 1];
    options.input = getappdata(0, 'audio_input');
    options.fs = getappdata(0, 'audio_fs');
    [options.len, options.track] = size(options.input);
    
    % filter handler
    output_balance = bfilter(options);
    setappdata(0, 'audio_input', output_balance);
end
